#ifndef FIELD_H
#define FIELD_H
#include <vector>
#include <windows.h>

#ifndef MAP_H
#include "map.h"
#endif

#ifndef PLANT_H
#include "Plant.h"
#endif

#ifndef TANAH_H
#include "Tanah.h"
#endif

class field : public map{
	const int xsell;
	const int ysell;
	const int xportal;
	const int yportal;
	Object* mfield[13][13];
	
public:
	Object* getObject(int,int) const;
	/*Mengembalikan object pada koordinat x,y*/
	field(); 
	/*konstruktor kelas field, tanpa parameter karena size dari field sudah default*/
	~field(); 
	/*destruktor kelas field*/
	field(const field&);
	/*copy konstruktor kelas field*/
	bool IsSellingSpot(int,int);
	/*Fungsi boolean, mengembalikkan apakah titik yang berkoordinat (x,y) merupakan selling point*/
	bool IsPlowable(int, int); 
	/*Fungsi boolean, mengembalikan apakah titik yang berkoordinat (x,y) dapat dicangkul*/
	bool IsPlantable(int, int); 
	/*Fungsi boolean, mengembalikan apakah titik yang berkoordinat (x,y) dapat ditanami*/
	bool IsSlashable(int, int); 
	/*Fungsi boolean, mengembalikan apakah titik yang berkoordinat (x,y) dapat disabit*/
	bool IsWalkable(int, int); 
	/*Fungsi boolean, mengembalikan apakah titik yang berkoordinat (x,y) dapat dilewati*/
	bool IsWaterable(int, int);
	/*Fungsi boolean, mengembalikan apakah titik yang berkoordinat (x,y) dapat diairi*/
	bool IsHarvestable(int, int);
	/*Fungsi boolean, mengembalikan apakah titik yang berkoordinat (x,y) dapat dipanen*/
	void GrowAllPlant(); 
	/*Prosedur yang menimbulkan efek menumbuhkan seluruh tanaman di ladang*/
	void WaterAllPlant(); 
	/*Prosedur yang menimbulkan efek yang mengairi seluruh tanaman di ladang*/
	void DieAllPlant(); 
	/*Prosedur yang menimbulkan efek mematikan seluruh tanaman yang ada di ladang*/
	bool InsertPlant(Plant* o, int x, int y);
	/*Prosedur untuk memasukkan sebuah objek ke koordinat (x,y) secara keseluruhan*/
	void InsertObject(Object*,int, int);
	/*Prosedur untuk memasukkan sebuah objek ke koordinat (x,y)*/
	void DeleteObject(int, int); 
	/*Prosedur untuk menghilangkan sebuah objek yang berada di koordinat (x,y)*/
	std::vector<int> GetDestination(); 
	/*Fungsi getter untuk variable accesable_dest*/
	void Display(int,int, int,int,int,int, int, int,int,int, int,int);
	/*Fungsi untuk menampilkan interface ladang kepada player.*/
};

#endif
